﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AudiPyme.DAL;

namespace AudiPyme.BLL
{
    //Clase para formatear las relaciones tipo activo - amenaza - criterio de riesgo de las matrices en las tablas de la interfaz
    public class TipAmenCritTabla
    {
        int idTipoActivo;
        String tipoActivo;
        int idAmenaza;
        String amenaza;
        int idCriterioRiesgo;
        String criterioRiesgo;

        public int IdTipoActivo
        {
            get { return idTipoActivo; }
            set { idTipoActivo = value; }
        }
        public String TipoActivo
        {
            get { return tipoActivo; }
            set { tipoActivo = value; }
        }

        public int IdAmenaza
        {
            get { return idAmenaza; }
            set { idAmenaza = value; }
        }

        public String Amenaza
        {
            get { return amenaza; }
            set { amenaza = value; }
        }

        public int IdCriterioRiesgo
        {
            get { return idCriterioRiesgo; }
            set { idCriterioRiesgo = value; }
        }


        public String CriterioRiesgo
        {
            get { return criterioRiesgo; }
            set { criterioRiesgo = value; }
        }

        public TipAmenCritTabla()
        {
            idTipoActivo = 0;
            tipoActivo = "";
            idAmenaza = 0;
            amenaza = "";
            idCriterioRiesgo = 0;
            criterioRiesgo = "";
        }


        public TipAmenCritTabla(int IdTipoActivo, String TipoActivo, int IdAmenaza, String Amenaza, int IdCriterioRiesgo, String CriterioRiesgo)
        {
            idTipoActivo = IdTipoActivo;
            tipoActivo = TipoActivo;
            idAmenaza = IdAmenaza;
            amenaza = Amenaza;
            idCriterioRiesgo = IdCriterioRiesgo;
            criterioRiesgo = CriterioRiesgo;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCrit()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == true
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritEliminadas()
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == false
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritPorTipoActivo(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == true && t.TipoActivo.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritEliminadasPorTipoActivo(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == false && t.TipoActivo.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }



        public static List<TipAmenCritTabla> RelacionesTipActAmenCritPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == true && a.Amenaza.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritEliminadasPorAmenaza(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == false && a.Amenaza.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritPorCriterio(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == true && c.CriterioRiesgo.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }

        public static List<TipAmenCritTabla> RelacionesTipActAmenCritEliminadasPorCriterio(String TextoBuscar)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<TipAmenCritTabla> LRelaciones = new List<TipAmenCritTabla>();
            IQueryable<TipAmenCritTabla> relaciones = (from m in agenteBD.Matriz_TipoActivosAmenazasCriteriosRiesgoEstablecer
                                                       join t in agenteBD.TiposActivosEstablecer on m.IdTipoActivo equals t.IdTipoActivo
                                                       join a in agenteBD.AmenazasEstablecer on m.IdAmenaza equals a.IdAmenaza
                                                       join c in agenteBD.CriteriosRiesgoEstablecer on m.IdCriterioRiesgo equals c.IdCriterioRiesgo
                                                       where m.Actual == false && c.CriterioRiesgo.Contains(TextoBuscar)
                                                       select new TipAmenCritTabla { IdTipoActivo = m.IdTipoActivo, TipoActivo = t.TipoActivo, IdAmenaza = m.IdAmenaza, Amenaza = a.Amenaza, IdCriterioRiesgo = m.IdCriterioRiesgo, CriterioRiesgo = c.CriterioRiesgo }).Distinct().OrderBy(i => i.IdTipoActivo).ThenBy(a => a.IdAmenaza).ThenBy(c => c.IdCriterioRiesgo);
            if (relaciones.Count() != 0)
            {
                LRelaciones = relaciones.ToList();
            }
            return LRelaciones;
        }
    }
}
